// 登录验证路由函数

// 导入用户集合构造函数
const { User } = require('../../model/user');

module.exports = async (req, res) => {
    // 接收请求参数
    // res.send(req.body);
    // 进行二次验证
    const { email, password } = req.body;
    // 如果用户没有输入账号或者密码
    if (email.trim().length == 0 || password.trim().length == 0) return res.status(400).render('admin/error', { msg: '邮箱或密码错误,请重新登录~' });
    // 根据邮箱地址查询用户信息 因为邮箱地址是唯一的只有一个所有使用 findOne  其中通过 await 可通过返回值拿到异步返回结果
    // findOne指的是查找指定表的单条数据，返回一个对象
    // 如果查询到用户 user 则是对象类型 如果没有查询到则是空
    let user = await User.findOne({ email });
    // 查询到了用户
    if (user) {
        // 将客户端的密码和用户进行比对
        if (password == user.password) {
            // 登录成功
            // 通过请求将uzname存储到 session 中去
            req.session.username = user.username;
            // 将用户角色也存储在 session 中方便后期做管理员判断
            req.session.role = user.role;
            // 将用户向外暴露抽离为公共参数
            req.app.locals.userinfo = user;
            // 对用户角色进行判断
            if(user.role == 'admin') {
                //  跳转到用户列表页面
                res.redirect('/admin/user');
            }else {
                // 跳转搭配到博客首页
                res.redirect('/home/');
            }
            
        } else {
            return res.status(400).render('admin/error', { msg: '邮箱或密码错误,请重新登录~' })
        }
    } else {
        // 没有查询到用户
        return res.status(400).render('admin/error', { msg: '邮箱或密码错误,请重新登录~' });
    }
}